﻿// Процедура обновляет индекс полнотекстового поиска
&НаСервере
Процедура ОбновитьИндекс()
	ПолнотекстовыйПоиск.ОбновитьИндекс();
	ОбновитьСтатусВыполнить();
КонецПроцедуры

// Обработчик команды ОбновитьИндекс
&НаКлиенте
Процедура ОбновитьИндексВыполнить()
	Состояние(НСтр("ru = 'Подождите!'", "ru") 
		+ Символы.ВК 
		+ НСтр("ru = 'Идет обновление полнотекстового индекса...'", "ru"));
	ОбновитьИндекс();
	Состояние(НСтр("ru = 'Обновление полнотекстового индекса завершено'", "ru"));
КонецПроцедуры
        

// Процедура выполняет очистку индекса полнотекстового поиска
&НаСервере
Процедура ОчиститьИндексСервер() Экспорт
	ПолнотекстовыйПоиск.ОчиститьИндекс(); 
	ОбновитьСтатусВыполнить();
КонецПроцедуры	

// Обработчик команды ОчиститьИндекс
&НаКлиенте
Процедура ОчиститьИндексВыполнить()
	ОчиститьИндексСервер();	
КонецПроцедуры

// Процедура обновляет информацию об индексе и управляет доступностью кнопок
&НаСервере
Процедура ОбновитьСтатусВыполнить()
	Элементы.ОбновитьИндекс.Доступность = Ложь;
	Элементы.ОчиститьИндекс.Доступность = Ложь;
	Элементы.ПроверитьИндекс.Доступность = Ложь;
	
	РазрешитьПолнотекстовыйПоиск = ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить;
	ДатаАктуальностиИндекса = '00010101';
	СтатусИндекса = "";
	РезультатПроверкиИндекса = Новый ФорматированнаяСтрока("");
	
	Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
		ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности();
		
		Если ПолнотекстовыйПоиск.ИндексАктуален() Тогда
			СтатусИндекса = Новый ФорматированнаяСтрока(НСтр("ru = 'Обновление индекса не требуется'", "ru"), , ЦветаСтиля.ЦветТекстаНормальногоСостояния);
		Иначе                                                 
			СтатусИндекса = Новый ФорматированнаяСтрока(НСтр("ru = 'Требуется обновление индекса'", "ru"), , ЦветаСтиля.ЦветТекстаОшибочногоСостояния);
		КонецЕсли;
		
		Если ПравоДоступа("Администрирование", Метаданные) Тогда
			Элементы.ОчиститьИндекс.Доступность = Истина;
			Элементы.ОбновитьИндекс.Доступность = Истина;
			Элементы.ПроверитьИндекс.Доступность = Истина;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры


// Процедура устанавливает режим полнотекстового поиска
&НаСервере
Процедура УстановитьПолнотекстовыйПоискРазрешен(Разрешен) Экспорт
	Если Разрешен Тогда
		ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить);
	Иначе
		ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить);
	КонецЕсли;
	ОбновитьСтатусВыполнить();
КонецПроцедуры

&НаКлиенте
Процедура РазрешитьПолнотекстовыйПоискПриИзменении(Элемент)
	Попытка
		УстановитьПолнотекстовыйПоискРазрешен(РазрешитьПолнотекстовыйПоиск);
	Исключение
		РазрешитьПолнотекстовыйПоиск = НЕ РазрешитьПолнотекстовыйПоиск;
		Инфо = ИнформацияОбОшибке();
		СтрокаИсключения = Инфо.Описание 
		+ "." 
		+ Символы.ВК 
		+ НСтр("ru = 'Вероятно, запущено регламентное задание обновления индекса. Попробуйте еще раз некоторое время спустя.'", "ru");
		ВызватьИсключение СтрокаИсключения;
	КонецПопытки;
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ОбновитьСтатусВыполнить();
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьИндекс(Команда)
	ПроверитьИндексНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПроверитьИндексНаСервере()
	Если ПолнотекстовыйПоиск.ПроверитьИндекс() Тогда
		РезультатПроверки = NStr("ru = 'Проверка индекса выполнена успешно'", "ru");
		РезультатПроверкиИндекса = Новый ФорматированнаяСтрока(РезультатПроверки, , ЦветаСтиля.ЦветАкцента);
	Иначе
		РезультатПроверки = NStr("ru = 'Обнаружены ошибки при проверке индекса'", "ru");
		РекомендацияПерестроения = NStr("ru = 'Рекомендуется очистить и обновить индекс'", "ru");
		РезультатПроверкиИндекса = Новый ФорматированнаяСтрока(РезультатПроверки + Символы.ПС + РекомендацияПерестроения, , ЦветаСтиля.ЦветОтрицательногоЧисла);
	КонецЕсли;
КонецПроцедуры	